package com.test.lock;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

/**
 * 
 * @author xuguangqiao
 *
 */
public class ExtThreadPool {
	/**
	 * @author xuguangqiao
	 *
	 */
	public static class MyTask implements Runnable {

		private String name;

		public MyTask(String name) {
			this.name = name;
		}

		public void run() {
			System.out.println("正在执行：Thread ID:" + Thread.currentThread().getId() + ",TaskName=" + name);
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}

	public static void main(String[] args) throws InterruptedException {
		ExecutorService es = new ThreadPoolExecutor(5, 5, 0L, TimeUnit.MILLISECONDS,
				new LinkedBlockingQueue<Runnable>(5)) {
			@Override
			protected void beforeExecute(Thread t, Runnable r) {
				System.out.println("准备执行：" + ((MyTask) r).name);
			}

			@Override
			protected void afterExecute(Runnable r, Throwable t) {
				System.out.println("准备执行完成：" + ((MyTask) r).name);
			}

			@Override
			protected void terminated() {
				System.out.println("线程池退出");
			}
		};

		for (int i = 0; i < 5; i++) {
			MyTask task = new MyTask("TASK-GEM" + i);
			es.execute(task);
			//Thread.sleep(10);
		}
		es.shutdown();
	}
}
